#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <set>
#include <bitset>
#include <utility>
using namespace std;

#define mm(a, n) memset(a, n, sizeof a)
#define mk(a, b) make_pair(a, b)

const double eps = 1e-6;
const int INF = 0x3f3f3f3f;

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef pair<LL, LL> PLL;
typedef pair<int, LL> PIL;

inline void quickread() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
}

const int N = 1010;

double weight[N], price[N];
int n;
double m;

inline void solution() {
    cin >> n >> m;
    // 单价 数量 总价
    priority_queue<pair<double, pair<double, double>>> pq;
    for (int i = 0; i < n; i ++ ) 
        cin >> weight[i];
    for (int i = 0; i < n; i ++ ) 
        cin >> price[i];
    for (int i = 0; i < n; i ++ ) {
        double w, p;
        w = weight[i], p = price[i];
        pq.push(mk(p / w, mk(w, p)));  
    } 
    double res = 0;
    // 队列为空 所有的东西全部卖完了
    while (m && pq.size()) {
        auto head = pq.top(); pq.pop();
        if (m >= head.second.first) {
            res += head.second.second;
            m -= head.second.first;
        } else {
            res += m * head.first;
            m = 0;
        }
    }
    printf("%.2lf\n", res);
}
int main() {
    freopen("input.txt", "r", stdin);
    quickread();
    solution();
    return 0;
}